package cn.edu.xjtu.hash.hashSet.intersection;

/**
 * 两个数组的交集
 * 
 * 给定两个数组，编写一个函数来计算它们的交集。
 */
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Solution {

  public static void main(String[] args) {
    int[] nums1 = new int[] { 1, 2, 2, 1 };
    int[] nums2 = new int[] { 2, 2 };

    System.out.println(Arrays.toString(intersection(nums1, nums2)));
  }

  public static int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> ret = new HashSet<>();
    Set<Integer> all = new HashSet<>();

    int[] more, less;
    // 将包含元素比较多的数组存入哈希表中,并检查重复元素
    if (nums1.length > nums2.length) {
      more = nums1;
      less = nums2;
    } else {
      more = nums2;
      less = nums1;
    }

    for (int i : more) {
      all.add(i);
    }
    for (int i : less) {
      if (all.contains(i) && !ret.contains(i)) {
        ret.add(i);
      }
    }
    int[] list = new int[ret.size()];
    int index = 0;
    for (int i : ret) {
      list[index++] = i;
    }
    return list;

  }
}
